package com.online.controller;

import com.faneui.common.bean.BaseResp;
import com.faneui.common.exception.BusinessException;
import com.faneui.common.utils.ListUtils;
import com.online.dal.dao.UserDAO;
import com.online.dal.model.Order;
import com.online.dal.model.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpSession;
import java.util.List;
//使用@Controller时需要用@ResponseBody注释
@RestController//代表该类是充当Controller的作用，自动添加@Controller和@ResponseBody注释
@RequestMapping("login")//RequestMapping是用来处理请求地址映射的注解，可用于类或方法上
public class LoginController {

    @Autowired//注解，它对类成员变量 方法及构造函数进行标注，完成自动装配的工作，通过使用来消除 set ，get方法
    private UserDAO userDAO ;

    @Autowired
    private HttpSession httpSession;

    @RequestMapping(value = "", method = RequestMethod.GET)
    public ModelAndView indexOfAll() throws Exception {
        //使用ModelAndView类用来存储处理完后的结果数据，以及显示该数据的视图
        ModelAndView mv = new ModelAndView("login");
        return mv;
    }
    //RequestMapping是用来处理请求地址映射的注解，可用于类或方法上
    @RequestMapping(value = "/dologin", method = RequestMethod.POST)
    @ResponseBody//与RequestMapping合用，将RequestMapping返回的路径，直接返回成json数据
    public BaseResp doLogin(@RequestBody User user) throws BusinessException {
        BaseResp resp = new BaseResp();//使用ModelAndView类用来存储处理完后的结果数据，以及显示该数据的视图
        try {
            // 校验 user 参数是否为空
            //StringUtil类isBlank（）方法判断某字符串是否为空或长度为0或由空白符构成
            if(StringUtils.isBlank(user.getUserName())) {
                throw new BusinessException("用户名为空") ;
            }
            if(StringUtils.isBlank(user.getPassword())){
                throw new BusinessException("密码是空");
            }
            // 先检查下 username 是否存在
            // 通过传入的参数，对param对象赋值
            User param = new User();
            param.setUserName(user.getUserName());
            param.setPassword(user.getPassword());
            //通过queryByModel方法查询userName与password是否存在，并存入users队列空间
            List<User> users = userDAO.queryByModel(param) ;
            if(ListUtils.isEmpty(users)) {
                throw new BusinessException("用户名或密码错误") ;
            }
            // 将用户放入回话中
            //声明u对象，从users队列空间中取出存入的数据第一个条数据组
            User u = users.get(0) ;
            //将取出的数据创建属性/值对，放入会话中
            String key = "user" ;
            httpSession.setAttribute(key,u);
            //List<Object> orders = null ;
        } catch (Exception ex) {
            resp.setSuccess(false);
            resp.setMsg(ex.getMessage());
        }
        return resp;
    }


}
